
Pravidla pro tvorbu vrazu podle slovnho zadn pro vbr objekt ze seznamu objekt.
Pro tvorbu vraz je pouit speciln jazyk se syntax dle ne uvedench pravidel.

Vraz kter se m dle slovnho zadn vytvoit, m urit jestli dan objekt m bt vybrn do vslednho seznamu. Objekt pitom o sob je schopen podat informace, kter jsou uvedeny ne.
Program, ve kterm se vraz pouije, postupn aplikuje vraz na kad objekt ve skupin objekt a kdy vraz pro objekt bude true (nenulov hodnota), objekt bude do vslednho seznamu zaazen.

Ve vrazu lze pout:

seln opertory pro vpoty: + - * / ^

logick opertory: and or 

Priority vech opertor jsou standardn

zvorky ( ) lze pout pro zajitn pednosti ve vyhodnocen

opertory pro porovnn sel nebo text se standardnm vznamem > >= < <= <> 

dal opertory jen pro porovnn text s monost na prav stran vrazu pout zstupn hvzdiky: *=  *<>

konstantn texty je teba ve vslednm vrazu uvst v uvozovkch,

funkce bez parametr se uvdj bez zvorek

Textov funkce 
    layer ...  jmno hladiny (nebo jen hladina)
    name ...   jmno objektu (nebo jen jmno nebo jmno polygonu (nebo jinho typu objektu)

Pklad:
Zadn: jmno zan slovem trasa 
Vsledn vraz m vypadat takto: name*="trasa*"
(opertor *= znamen, e na prav stran vrazu lze pout hvzdiky, kter nebudou hodnoceny jako bn znaky, ale jako zstupn znaky za jakkoliv text)

Pklad:
Zadn: jmno obsahuje text abc 
Vsledn vraz m vypadat takto: name*=*abc*

Pklad: Zadn: hladina m na konci text ef (nebo: jmno hladiny m na konci text ef) 
Vsledn vraz m vypadat takto: layer*=*ef
                                                   


funkce podle kterch se pozn, jestli je objekt uritho typu (polygon ap.) 

    funkce IsPlg ... vrt true, je-li objekt Polygon

    funkce IsPlgLat ... vrt true, je-li objekt Pn Polygon

    funkce IsPlgLon ... vrt true, je-li objekt Podln Polygon

    funkce IsLine ... vrt true, je-li objekt seka

    funkce IsRect   ... vrt true, je-li objekt Obdlnk

    funkce IsCirc  ... vrt true, je-li objekt Krunice (Kruh)

    funkce IsArc   ... vrt true, je-li objekt Kruhov oblouk nebo oblouk

    funkce IsKanaP  ... vrt true, je-li objekt Kanalizan ppojka

    funkce IsVodaP  ... vrt true, je-li objekt Vodovodn ppojka
    - Pokud jsou v zadn ppojky a nen eeno, jestli kanalizan nebo vodovodn,
jedn se o vechny ppojky.

    funkce IsTypM  ... vrt true, je-li objekt modelovho typu, t modelov objekt nebo modelov ve spojen s jednm z ve uvedench typ objekt na pklad modelov polygon. 
Pokud se maj najt vechny polygony modelovho typu (modelov polygony) Ml bys vytvoit vraz: IsPlg and IsTypM

    funkce IsTypD  ... vrt true, je-li objekt vkresovho typu, vkresov objekt


    funkce NameNoStdLen ... vrt true, je-li objekt pojmenovn, 
    
Funkce pouze pro Polygon (i pro pn polygon), pouit s jinm typem objektu je chyba:
    funkce NumPoi ... vrt poet bod polygonu
    funkce Length ... vrt dlku polygonu
    funkce AreaSimp ... vrt plochu polygonu

    funkce PName0 ... kde 0 znamen 1. bod polygonu ... vrt jmno 1. bodu polygonu, PName1 vrt jmno 2. bodu atd. 
    seln kd me bt v zadn zapsn zkrcen jako .kd nebo ck nebi k 

    funkce PNCode0 ... kde 0 znamen 1. bod polygonu ... vrt seln kd  1. bodu polygonu, PNCode1 vrt seln kd  2. bodu polygonu atd. 
    seln kd me bt v zadn zapsn zkrcen jako .kd nebo ck nebi k 
    
    funkce PTCodeX_Y ... kde X se nahrad slem textovho kdu u danho bodu (u kadho bodu me bt devt textovch kd) a Y se nahrad zadanm slem bodu polygonu - 1.  Pokud nebude v zadn ureno, kter textov kd,     
    textov kd me bt v zadn zapsn zkrcen jako t.kd nebo tk
    
    Pklad zadn: 2. textov kd u 5.bodu polygonu
    Vsledn vraz: PTCode2_4
    Zdvodnn: kdy u bodu se sluj od 1 a slo se pe hned za PTCode2, body polygonu se ale sluj od 0 a slo bodu se pe a za podtrtko. 

- Pokud je za specifikac objektu pouita spojka s, tk se
jen toho jednoho typu, nen-li pouito zvorek k seskupen nkterch typ objekt.

Pklady: 

zadn: objekt je polygon nebo kruh 
vsledn vraz:  IsPlg or IsCirc

zadn: polygony pojmenovan 
vsledn vraz:  IsPlg and NameNoStdLen
 
zadn: polygony nepojmenovan 
vsledn vraz:  IsPlg and not NameNoStdLen
 

funkce vracejc dal informace o objektech:
- platn pro vechny typy objekt, nen-li uvedeno jinak: 
- seln funkce:
  x ... funkce vrt souadnici x
  y ... funkce vrt souadnici y
  
  r ...  funkce vrt polomr - platn jen pro kruh a oblouk
  length ... funkce vrt dlku - funkce platn jen pro polygon a pn polygon
  NumPoi ... funkce vrt poet bod - funkce platn jen pro polygon a pn polygon
    
dal logick funkce:

funkce InNames(name1, name2, ...) m promnliv poet textovch parametr a vrt true, jestli je jmno testovanho objektu shodn s jednm z parametr funkce.
Pklad:
Zadn: polygony se jmny kruh1 a kruh2
Vsledn vraz: IsPlg and InNames(kruh1, kruh2)

funkci InNames velmi preferuj ped konstrukc name=, pokud budou zadny aspo 2 jmna objekt !!!
funkci InNames ale nikdy nepouij, pokud pjde o poronvn jen st jmen objekt, pak se mus vdy pout konstrukce name*=  

funkce InLayers(lay1, lay2, ...) m promnliv poet textovch parametr a vrt true, jestli je jmno hladiny testovanho objektu shodn s jednm z parametr funkce.
Pklad:
Zadn: polygony v hladinch vedeni1 a vedeni2
Vsledn vraz: IsPlg and InLayers(vedeni1, vedeni2)

funkci InLayers velmi preferuj ped konstrukc layer=, pokud budou zadny aspo 2 hladiny !!!
funkci InLayers ale nikdy nepouij, pokud pjde o poronvn jen st jmen hladin, pak se mus vdy pout konstrukce layer*=  

Tyto dv funkce velmi rychle pracuj i s vtm potem hladin nebo jmen  

Pokud je v zadn uveden pojem Zkladn hladina, je to jmno hladiny, ale ve vrazu se msto toho pouije przdn text: tedy    

Pklady:

Zadn: polygony v hladinch Zkladn a stoka
Vsledn vraz: IsPlg and CmpLayers(, stoka)
 
Zadn: polygony v Zkladn hladin
Vsledn vraz: IsPlg and layer=

- textov funkce:
name ... funkce vrt jmno objektu
layer ... funkce vrt jmno hladiny (nebo jmno vrstvy)

Pklad:
zadn pro tebe: polygony a kruhy v hladin veden
ml bys vytvoit vraz: (IsPlg or IsCirc) and layer=veden

Je-li v zadn pouit pojem nadobjekt nebo pojem nadazen objekt nebo pojem hlavn objekt nebo pojem rodi, pak ped jmno funkce je teba uvst zanak teka.
Pokud je v zadn: polygony pod krunic, znamen to tot jako polygony, jejich nadobjekt je krunice.   

Pklad pro nadobjekt:

zadn: jmno nadobjektu (nebo jmno nadazenho objektu, nebo jmno hlavnho objektu, nebo jmno rodie) 
vraz: .name

zadn: polygony pod objektem v hladin abc
vraz: IsPlg and .layer="abc"

zadn: polygony pod objektem, kter je pod objektem v hladin abc
vraz: IsPlg and ..layer="abc"

zadn: polygony se jmnem zanajcm ad a jejich hlavn objekt je seka a jeho jmno zan abc
vraz: IsPlg and name*="*ad" and .IsLine and .name*="abc*"  
                                                           

Komplexnj pklad:

Zadn:
  Objekt je  polygon nebo oblouk v hladin kter m na zatku svho jmna text veden,
  a nebo je objekt kruh v hladin znaky a jeho jmno kon xxx

Ml bys dle tohoto zadn vytvoit vraz:
 ( IsPlg or IsArc ) and layer*=veden* or IsCirc and layer=abc and name*=*xxx
 
U zadn: Polygony kde . kd 1. bodu polygonu je 11 a 2. t.kd 2. bodu polygonu =tk22
zapomn na to, e jde o polygon a nuvede IsPlg. Prosm dej na podobn vci pozor

V zadn mohou bt chyby:
- polomr mohou mt jen krunice(kruhy) a oblouky, tedy napklad zadn polygony s polomrem>10 je chyba
- textov a seln kdy mohou mt jen body polygonu nebo pnho polygonu

Pklady:
zadn chybn:
polygony a obdlnky s polomrem >10 

zadn, kter je OK, protoe polomr se vztahuje jen ke kruhu :
polygony, obdlnky  a kruhy s polomrem >10

sprvn vraz: IsPlg or IrRct or IsCirc and r>10
chybn vraz, kter bys neml sestavit: (IsPlg or IrRct or IsCirc) and r>10     

zadn, kter je chybn, protoe zvorky uruj, e polomr se vztahuje ke vem objektm, co je chyba:
(polygony, obdlnky  a kruhy) s polomrem >10
V tomto ppad je teba vypsat chybu
Postupuj stejn se vemi typy objekt, kontroluj, e se urit typ objektu se neme zkombinovat s vlastnost, kterou neposkytuje,
tedy chybn je i:
 (pn polygony, obdlnky  a kruhy) s polomrem >10
 (obdlnky  a kruhy) s polomrem >10
 (polygony a oblouky) s polomrem=50
 a dal kombinace, kter je teba, abys zkontroloval.
 
 Pokud tam nebudou pouity zvorky, sestav vraz tak, aby se vlastnost vztahovala jen k tomu, k emu me
 tedy napklad 
 Zadn: polygony a oblouky s polomrem=50
 Me napsat t bez zvorek:
 IsPlg or IsArc and r=50
 Nebo me vytvoit vraz, kde zvorkama potvrd, co pat k sob:
 IsPlg or (IsArc and r=50)  
 
Obdobn textov i seln kdy pat jen k polygonm a pnm polygonm
Je teba tedy ohlsit chybu i pi zadn:
polygony a oblouky s textovm kdem u prvnho bodu =aa
protoe vraz:
(IsPlg or IsArc) and PTCode1_0 = aa
je chybn, kde textov kd se m vyhodnotit pro oblouk, co nelze
 
-- pokud zjist chybu nevracej vraz ale text, kde vysvtl chybu
 

Jako vsledek poslej pouze vsledn vraz, nic vc, ani dn dal znaky kolem vrazu, nebo pokud je v zadn chyba napi informaci o chyb.

Konec pravidel.

Dle tchto pravidel prosm vytvo vraz pro zadn:


